Skip to content
GitHub

01.Go Variable

  • Go 变量命名要求以字母或下划线开头
  • 不可以使用 Go 中的 25 关键字及 37 个保留字
  • 变量要求声明类型或使用类型推导
var <variable name> <variable type> = <value>    // 使用 var 进行变量定义, 最完整的变量定义
var age int = 18                                 // 声明变量类型并赋值

var <variable name> <type>                       // 变量定义, 只定义变量名和类型, 变量默认为对应类型的初始值
var str string                                   // 声明变量和类型, 未赋值使用默认值(string 默认值 "")

var <name> = <value>                             // 变量定义, 通过值自动推导变量类型
var age = 18                                     // 声明变量, 赋值, 并使用类型推导

<variable name> := <value>                       // 变量定义, 通过值自动推导类型, 仅能在函数内部使用
name := "str"                                    // 声明变量, 赋值, 并使用类型推导(仅限于函数内使用)

var (
   str    string                                 // ""    声明变量未赋值, 使用 string 类型默认值 ""
   num    int                                    // 0     声明变量未赋值, 使用 int 类型默认值 0
   boolean bool                                  // false 声明变量未赋值, 使用 bool 类型默认值 false
)

var (
   str string = "hello"                          // 批量声明并赋值
   num int    = 4
   boolean    = true
)

str, num := "hello", 3                           // 多个变量声明并赋值

Go 中存在未被使用的变量会报错
使用匿名变量 _ 处理无需使用的变量

var name string = "John"
fmt.Println("hello world")
> ./main.go:10:6: name declared but not used     // 变量 name 未使用, 报错

name, _ := "John", "variable"                    // 使用匿名变量, 忽略后一个值
fmt.Println("hello ", name)
> hello  John

import {
   . "fmt"                                       // 使用模块时无需添加模块名称
   _ "os"                                        // 引入但未使用的模块, _ 处理后不会报错
}

Println("hello world")                           // 引入时使用 . 使调用 fmt 方法无需添加模块名称

常量声明时候必须赋值
常量一旦声明就不可变化

const e = 2.7182                                 // 常量声明必须要赋值, 且不可更改

const (                                          // 快速声明常量, a b 赋值 10
   a = 10                                        // a = 10
   b                                             // a = 10 继承上一个变量的值
   c = 5                                         // c = 5
   d                                             // d = 5
)

iota 是定义常量时使用的自增关键字
同 const 定义块互不干扰, 所有注释行和空行全部忽略
从第 1 行开始,iota 从 0 逐行加 1

const (
   a = iota                                      // iota = 0  a = 0
   b                                             // iota = 1  b = 1
   c                                             // iota = 2  c = 2
)

const (                                          // 变更初始值
   a = iota + 3                                  // iota = 0  a = 3
   b                                             // iota = 1  b = 4
   c = iota + 2                                  // iota = 2  c = 4
   d                                             // iota = 3  d = 5
)

const (                                          // iota 插值
   a = iota                                      // iota = 0  a = 0
   b = 5                                         // iota = 1  b = 5
   c = iota                                      // iota = 2  c = 2
   d                                             // iota = 3  d = 3
)
  • 通过占位符替换值打印
  • 通过不同占位符可以打印变量不同属性值
  • 万能占用符 %v (%#v %+v 表示不同打印形式)
fmt.Printf(<str>, <string>, <int>, <bool> ...)   // 第一个参数是字符串,后接任意类型值, 占位符需与值数量对应

fmt.Printf("common: %v \n", "common")            // 万能占用符, 自动判断类型
fmt.Printf("string: %s \n", "string")            // 字符串变量占位符
fmt.Printf("char  : %c \n", 'c')                 // 单个字符变量占位符, 单个字符用单引号
fmt.Printf("number: %d \n", 4)                   // 整形变量占位符
fmt.Printf("float : %f \n", 2.33)                // 浮点型变量占位符
fmt.Printf("bool  : %t \n", true)                // 布尔值变量占位符
fmt.Printf("point : %p \n", *variable)           // 指针变量占位符

fmt.Printf("variable type: %T \n", variable)     // 变量类型占位符

Golang 中存在一些关键字和保留字, 不能作为变量名称

   break        default      func         interface    select
   case         defer        go           map          struct
   chan         else         goto         package      switch
   const        fallthrough  if           range        type
   continue     for          import       return       var
    Constants:    true  false  iota  nil

        Types:    int  int8  int16  int32  int64
                  uint  uint8  uint16  uint32  uint64  uintptr
                  float32  float64  complex128  complex64
                  bool  byte  rune  string  error

    Functions:   make  len  cap  new  append  copy  close  delete
                 complex  real  imag
                 panic  recover